package top.xia17.plugins.fast.common.model;

import lombok.*;

import java.io.Serializable;

/**
 * 带序号的数据
 * 当 sort 相同时 用value的toString()的值来进一步比较
 * value 参与排序 ， data只做数据存储
 * @author xia17
 * @date 2020/8/5 11:58
 */
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode
public class BiObjSortKey<T,R> implements Comparable<BiObjSortKey<T,R>> , Serializable  {


    /** 序号 **/
    private int sort;

    /** key值 **/
    private T value;

    /** 数据 */
    private R data;

    @Override
    public String toString() {
        return value.toString();
    }


    /**
     * 实现Comparable接口的 compareTo方法
     * 优先比较sort ， sort相同的时候比较 String 的值
     * @param sortKey 比较的对象
     * @return 相等返回0 ， 大于比较的对象返回1 小于比较的对象返回-1
     */
    @Override
    public int compareTo(BiObjSortKey sortKey) {
        if (this.sort == sortKey.sort){
            return value.toString().compareTo(sortKey.value.toString());
        }
        return this.sort - sortKey.sort > 0 ? 1 : -1 ;
    }
}
